會想要在這三十天試著學Groovy是看了The Well-Grounded Java Developer這本書後,認識了可以在JVM上跑的語言,然後裡面有一張圖引起了我對學groovy的興趣,作者經驗認為如果讓一個Web網站快速成形(要讓一個java的網站跑起來要做的是可不少呢!!web.xml設定, servlet等一堆事情準備工作),則建議採用Dynamic型的語言,如Python、Ruby、Clojure等,那對於學過java的人來說,學習Groovy一則語法相似,學習較容易,二則Groovy在JVM上跑比其他Jython、JRuby或是其他語言performance來的好,三則有一些API可以補java之不足之處,故利用這三十天看看自己可自學到什麼程度吧!
(免責聲明:相關圖片版權皆屬原出版社(Manning))
關於跟大家分享Groovy的語法,我是參考以下這兩本書:
1.Groovy In Action:
2.Groovy For Domain Specific Languages:
Groovy早在2003就已經由James Strachan著手開始這個計畫,在2004年GroovyOne研討會給了keynote說明自己希望java平台也能有Ruby、Python等Dynamic language的特色,故Groovy與java非常相似
Groovy充分利用JDK 7 Invokedynamic,與Groovy的Meta-Object-Protocol(MOP)最佳化,meta-class的觀念之後會提到,不過挺複雜的,我不知道是講得隊或是清楚
Groovy script可以用Groovyc precompile成bytecode後執行,也可以執行groovy xxx.groovy,直接run groovy xxx.groovy其實背後JVM有幫忙做一些事啦
跟其他在JVM上跑的語言一樣,都可以使用java的library,只是關鍵字跟java一樣都是import,多了一些親切感吧!?
可擴充原有JDK所提供的Library,在Groovy中稱GDK,因為MOP的機制,所以programmer可以在runtime新增或修改原有之方法,有點在Spring中AOP的fu,到時候再跟大家介紹吧
當然也不太一樣的地方:
1.支援Closure,雖然JDK 8開始就支援了,而且JDK 8 Developer Preview已經可以下載了
2.新增java所沒有的operator,例如要check參數是否為null pointer,可以?.這個operator,如xxx?.yyy,yyy是null pointer,則預設傳回null
3. 不強制宣告時指定型別(廢話),但是如果要做GORM似乎有規定,因為還沒看到那裏。
4. 簡化語法,如分號(;)可省略,除非多行程式碼寫在同一行、呼叫方法時括號可省略,如println x //OK、跟POJO相比,GroovyBean大幅簡化語法,如屬性的getter/setter不須額外寫
5. Groovy XmlParser及產生XML(Markup Builer)更人性化
最後就到<Groovy官網http://groovy.codehaus.org/Download?nc>以及請google GGTS下載GGTS 3.3版(應該是最新版),但是請不要忘記要安裝JDK 7,畢竟Groovy還是在JVM上跑的(JRE不行)
4. list跟map的宣告跟java不同,如GroovyConsole圖
5. 字串是單引號,雙引號有其他用途(GString)
Groovy請下載2.15版,因為Spring的Groovy on Grails Tool Suite(GGTS)目前只支援到2.15,安裝玩Groovy就跟python一樣,有現成的IDE(GroovyConsole)可以run script,前半段還不用grails時,用GroovyConsole就已足夠。
今天就先這樣,明天繼續!